<?php

//防止恶意调用
if (!defined('IN_MOD'))
{
    die('Hacking attempt');
}

// 创建文件
function getfile($fileurl='',$msg='')
{
	file_put_contents($fileurl,$msg,FILE_APPEND);
}

// 删除文件
function delfile($fileurl='')
{
	unlink($fileurl);	
}

// 是否存在文件
function iffile($fileurl='')
{
	$fileok = 0;
	if(file_exists($fileurl))
	{
		$fileok = 1;	
	}
	
	return $fileok;
}

// 是否存在函数
function iffun($funname='')
{
	if(function_exists($funname))
	{
		return 1;
	}else{
		return 0;	
	}
}

// 生成随机数
function randstrs($length=0)
{
	$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
	$len=strlen($str)-1;
	$randstr='';
	for($i=0;$i<$length;$i++)
	{
		$num=mt_rand(0,$len);
		$randstr .= $str[$num];
	}
	return $randstr;
}

// php header 跳转
function headerlocation($url='')
{
	header("location:".$url);exit;
}

// php js 刷新
function refnewpage($message="")
{
	if($message)echo "<script>alert('".$message."');</script>";
	echo "<script>location.reload();</script>";exit;
}

// php js 跳转
function alertlocation($url='',$message="")
{
	if($message)echo "<script>alert('".$message."');</script>";
	echo "<script>location.href='".$url."';</script>";exit;
}

// php js 返回上一页
function alertback($message="")
{
	if($message)echo "<script>alert('".$message."');</script>";
	echo "<script>history.back(-1);</script>";exit;
}

//打印数据
function modulep($arr=array()){
	echo "<pre>";
	print_r($arr);
	echo "</pre>";
}
function modulev($arr=array()){
	echo "<pre>";
	var_dump($arr);
	echo "</pre>";
}

// 自定义模块，自定义区块，自定义配置
// 自定义栏目，自定义插件，自定义扩展

/** 常用切割字符串，切割数组 **/
function getstrtoarr($f='',$str='')
{
	$arr = explode("$f", $str);	
	return $arr;
}
// 切割数组为字符串
function getarrtostr($f='',$arr='')
{
	$str = implode("$f", $arr);	
	return $str;
}

// 目录不存在时创建目录
function mkFolder($path='')
{
    if(!is_readable($path))
    {
        is_file($path) or mkdir($path,0700,true);
    }
}

/* 通过转换将数组插入数据库
** 将数组转换成JSON字符串，存入数据库，使用时再转换为数组即可 */
function getjsonstr($arrayarr=array(), $unicodeok=0)
{
	if($unicodeok == 1)
	{
		$arraystr = json_encode($arrayarr);// 将数组转换成JSON字符串
	}else{
		$arraystr = json_encode($arrayarr, JSON_UNESCAPED_UNICODE);// 将数组转换成JSON字符串
	}
	return $arraystr;
}
function getjsonarr($arraystr='', $objok=0)
{
	if($objok == 1)
	{
		$arrayarr = json_decode($arraystr);// 将JSON字符串转换回数组
	}else{
		$arrayarr = json_decode($arraystr, true);// 将JSON字符串转换回数组
	}
	return $arrayarr;
}

// URL编码
function geturlencode($parValue='')
{
	$parValue = urlencode($parValue);	
	return $parValue;
}

// URL解码
function geturldecode($parValue='')
{
	$parValue = urldecode($parValue);	
	return $parValue;
}

// base64 数据传输编码与解码 可用于在HTTP环境下传递较长的标识信息
function getbasestr($data='')
{
	$data = base64_encode($data);
	
	return $data;
}
function getbasedata($data='')
{
	$data =base64_decode($data);	
	
	return $data;
}

/* 通过转换将数组插入数据库
** 将数组转换成SQL字符串，存入数据库，使用时再转换为数组即可 */
function phparraysqlstr($arrayarr)
{
	$arraystr = serialize($arrayarr);// 将数组转换成SQL字符串
	return $arraystr;
}
function phparraysqlarr($arraystr)
{
	$arrayarr = unserialize($arraystr);// 将SQL字符串转换回数组
	return $arrayarr;
}

/** 是否是JSON数据
 * @param string $data Json 字符串
 * @param bool   $assoc 是否返回关联数组
 * @return bool|array 成功返回转换后的数组，否则返回 false
 */
function isJson($data = '', $assoc = true) {
    $data = json_decode($data, $assoc);
    if (is_array($data)) {
        return $data;
    }
    return false;
}

/* 内容TABLE */
function tablevar($data=array(),$var='',$str='')
{
	$res = str_replace($data, $var, $str);	
	
	return $res;
}

/* 合并两个数组
array_flip
反转数组中所有的键以及它们关联的值：
array_keys
返回包含数组中所有键名的一个新数组：
array_merge
数字键，直接往后添加，key重置
字符串键，后面的数组的值会替代前面的值
+
数字键，后面的数组的值不会替代前面的值
字符串键，后面的数组的值会替代前面的值
*/
function hbarray($arr1=array(),$arr2=array())
{
	$arr = array();
	$arr = array_merge($arr1,$arr2);	
	
	return $arr;
}

// 判断是否是中文
function ifzh($str='')
{
	if(preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $str)>0)
	{
	  return 1;// 全是中文
	}elseif(preg_match('/[\x{4e00}-\x{9fa5}]/u', $str)>0)
	{
	  return 2;// 含有中文
	}else{
		return 0;	
	}
}

// 判断是否多维数组 判断一个数组是一维数组或者是二维数组或多维数组
function ifarrayduo($arr=array())
{
	if(count($arr) == count($arr, 1))
	{
		return 0;
	}else{
		return 1;	
	}
}

// 判断数组不为空 支持三维数组判断
function ifarray($arr=array())
{
	$notempty = 0;
	foreach($arr as $key=>$val)
	{
		if(is_array($val))
		{
			foreach($val as $k=>$v)
			{
				if(is_array($v))
				{
					foreach($v as $k3=>$v3)
					{
						if(!empty($v3))
						{
							$notempty = 1;
						}	
					}
				}else{
					if(!empty($v))
					{
						$notempty = 1;
					}
				}
			}
		}else{
			if(!empty($val))
			{
				$notempty = 1;
			}
		}
	}
	
	return $notempty;
}

// 文本换行
function textbr($str='')
{
	$str = nl2br($str);	
	
	return $str;
}

//删除空格
function deltrimall($str='')
{
	$oldchar=array(" ","　","\t","\n","\r");
	$newchar=array("","","","","");
	
	return str_replace($oldchar,$newchar,$str);
}

// 去除换行
function delbr($str='')
{
	$str = str_replace(array("\r\n", "\r", "\n"), "", $str);  
	
	return $str; 	
}

// 设置cookie
function configcookie($name='',$value='',$moduletime=array())
{
	$d = isset($moduletime['d']) ? $moduletime['d'] : 1;
	$h = isset($moduletime['h']) ? $moduletime['h'] : 1;
	$i = isset($moduletime['i']) ? $moduletime['i'] : 60;
	$s = isset($moduletime['s']) ? $moduletime['s'] : 60;
	setcookie($name,$value, time()+$s*$i*$h*$d);
}

// 设置SESSION
function configsession($name='',$value='')
{
	$_SESSION[$name] = $value;	
}

//读取字符串长度中文英文使用方法
function gb_substr($str = '', $len = 70, $etc = ' ...') 
{ 
	if(0 == $len) return ""; 
	
	$str_len = preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $dummy); 
	if($len >= $str_len) 
	{ 
		return $str; 
	} 
	else 
	{ 
		$newstr = mb_substr($str,0,$len,'utf-8');
		return $newstr.$etc; 
	} 
}

// 删除第一个字符
function delstrq($str='')
{
	$str = substr($str,1); 	
	
	return $str;
}

// 删除最后一个字符
function delstrh($str='')
{
	$str = substr($str,0,strlen($str)-1); 	
	
	return $str;
}

// 替换或删除某个字符串
function delthstr($str='',$havstr='',$thstr='')
{
	$str=str_replace($havstr,$thstr,$str);	
	
	return $str;
}

// 字符串中包含
function ifstr($str='',$havstr='')
{
	if(strpos($str,$havstr) !== false)
	{
		return 1;
	}else{
		return 0;
	} 	
}

/*
** PHP遍历一个文件夹下所有文件和子文件夹的函数
echo "<pre>";
print_r(my_dir("plugins/modulepara/expplugins"));
echo "</pre>";
echo "<pre>";
print_r(my_dir("."));
echo "</pre>";
*/
function my_dir($dir='') {
    $files = array();
    if(@$handle = opendir($dir)) { //注意这里要加一个@，不然会有warning错误提示：）
        while(($file = readdir($handle)) !== false) {
            if($file != ".." && $file != ".") { //排除根目录；
                if(is_dir($dir."/".$file)) { //如果是子文件夹，就进行递归
                    $files[$file] = my_dir($dir."/".$file);
                } else { //不然就将文件的名字存入数组；
                    $files[] = $file;
                }
 
            }
        }
        closedir($handle);
        return $files;
    }
}

// 字符串中包含
function ifarraystr($str='',$havstr='')
{
	if(in_array($havstr,$str))
	{
		return 1;
	}else{
		return 0;
	} 	
}

// 编码转换（解决乱码等问题）
function getgbktoutf8($data='')
{
	$data = eval('return ' . iconv('gbk', 'utf-8', var_export($data, true)) . ';');// 新增转换编码解决中文乱码问题	
	
	return $data;
}

// xml文件转数组
function xmlfiletoarr($file='')
{
    $xml_array=simplexml_load_file($file); //将XML中的数据,读取到数组对象中
    
	return $xml_array;
}

//xml字符串转数组
function xmltoarr($path='',$fileok=0){
	$xmlfile = $path;
    if($fileok==1)$xmlfile = file_get_contents($path);//提取xml文档中的内容以字符串格式赋给变量
    $ob= simplexml_load_string($xmlfile,'SimpleXMLElement', LIBXML_NOCDATA);//将字符串转化为变量
    $json = json_encode($ob);//将对象转化为JSON格式的字符串
    $configData = json_decode($json, true);//将JSON格式的字符串转化为数组

    return $configData;
}

// php将对象转换成数组
function object_array($array='') {  
	if(is_object($array)) {  
		$array = (array)$array;  
	 }
	 if(is_array($array)) {  
		 foreach($array as $key=>$value) {  
			 $array[$key] = object_array($value);  
		 }  
	 }  
	 return $array;  
}

/** php解析带有命名空间的xml
**<ns1:CreateBillResponse xmlns:ns1="http://neusoft.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ns1:out>
    <ns1:OutVo>
      <ns1:strB2BCode xmlns="http://neusoft.com">AM1432690905685938443</ns1:strB2BCode>
      <ns1:strFlag xmlns="http://neusoft.com">0</ns1:strFlag>
      <ns1:strHpCode xsi:nil="true" xmlns="http://neusoft.com"/>
      <ns1:strReason xmlns="
http://neusoft.com">,产品编码为空,售达方编码为空</ns1:strReason>
    </ns1:OutVo>
  </ns1:out>
</ns1:CreateBillResponse>**/  
function parseNamespaceXml($xmlstr='')
{

    $xmlstr = preg_replace('/\sxmlns="(.*?)"/', ' _xmlns="${1}"', $xmlstr);
    $xmlstr = preg_replace('/<(\/)?(\w+):(\w+)/', '<${1}${2}_${3}', $xmlstr);
    $xmlstr = preg_replace('/(\w+):(\w+)="(.*?)"/', '${1}_${2}="${3}"', $xmlstr);
    $xmlobj = simplexml_load_string($xmlstr);
    return json_decode(json_encode($xmlobj), true);
}

// 网站到期关闭时间
function websitetime($time_start=0,$time_end=0)
{
	global $configinfo;
	
	$datetime = mktime();
	$timestart = strtotime($time_start);
	$timeend = strtotime($time_end);
	$fastend = ceil(($timeend-$datetime)/86400);//60s*60min*24h

	$websitetimehtml = hook_websitecolsetimehtml($time_start,$time_end,$fastend);
	
	if($timeend > $datetime && $fastend > 0 && $fastend <= 7)
	{
		$configinfo['fast_end_website_html'] = $websitetimehtml['fast_end_website'];
	}
	
	if($timestart > $datetime and !empty($timestart))
	{
		echo $websitetimehtml['start_website'];exit;
	}
	
	if($timeend < $datetime and !empty($timeend))
	{
		echo $websitetimehtml['end_website'];exit;
	}	
}

/**
 * 获取统计时间
 * @param $type
 * 1 上月
 * 2 本月
 * 3 近15天
 * 4 近30天
 * 5 后15天
 * 6 后30天
 * @return array
 */
function getRecentDate($type=0)
{
	$data = array(
		array(
			'firstday' => date('Ym01', strtotime('-1 month')),
			'lastday' => date('Ymt', strtotime('-1 month')),
		),
		array(
			'firstday' => date('Ym01', strtotime(date("Ymd"))),
			'lastday' => date('Ymd', strtotime((date('Ym01', strtotime(date("Ymd")))) . " +1 month -1 day")),
		),
		array(
			'firstday' => date('Ymd', strtotime("-15 day")),
			'lastday' => date('Ymd', strtotime('-1 day')),
		),
		array(
			'firstday' => date('Ymd', strtotime("-30 day")),
			'lastday' => date('Ymd', strtotime('-1 day')),
		),
		array(
			'firstday' => date('Ymd', strtotime("+1 day")),
			'lastday' => date('Ymd', strtotime('+15 day')),
		),
		array(
			'firstday' => date('Ymd', strtotime("+1 day")),
			'lastday' => date('Ymd', strtotime('+30 day')),
		),
	);
	return is_null($type) ? $data : $data[$type-1];
}

/**
 * 获取指定日期段内每一天的日期
 * @param  Date  $startdate 开始日期
 * @param  Date  $enddate   结束日期
 * @return Array
 */
function getDateFromRange($startdate=0, $enddate=0){

    $stimestamp = strtotime($startdate);
    $etimestamp = strtotime($enddate);

    // 计算日期段内有多少天
    $days = ($etimestamp-$stimestamp)/86400+1;

    // 保存每天日期
    $date = array();

    for($i=0; $i<$days; $i++){
        $date[] = date('Y-m-d', $stimestamp+(86400*$i));
    }
	
	$timedata = array();
	foreach($date as $key=>$val)
	{
		$timedata[$key]["xq"] = date("w",strtotime($val));
		$timedata[$key]["sj"] = $val;
		$timedata[$key]["rq"] = date('d',strtotime($val));
	}

    return $timedata;
}

// 获取指定时间日历
function getcalendar($startdate=0, $enddate=0)
{
	// 指定时间的每天日期
	$gettime = getDateFromRange($startdate, $enddate);
	
	// 自动补充前几天的日历
	$timedata = array();
	$xqdata = $gettime[0]['xq'] == 0 ? 7 : $gettime[0]['xq'];
	for($i=0; $i<$xqdata; $i++)
	{
		$timedata[$i]["xq"] = $i;
		$timedata[$i]["sj"] = date('Y-m-d', strtotime($gettime[0]['sj'].' -'.($xqdata-$i).' day'));
		$timedata[$i]["rq"] = date('d', strtotime($timedata[$i]["sj"]));
	}
	$hbgetdate = hbarray($timedata,$gettime);
	
	$i=0;
	$calendar = array();
	$getcalendar = array();
	foreach($hbgetdate as $key=>$val)
	{
		$i++;
		$calendar[] = $val;
		if($i % 7 == 0)
		{
			$getcalendar[] = $calendar;
			$calendar = array();
		}
	}
	
	return $getcalendar;	
}

// 获取日期全函数
function getdateinfo($date="",$time="")
{
	$dateinfo['date'] = date("Y-m-d H:i:s");     
	$dateinfo['yestdate'] = date("Y-m-d H:i:s",strtotime("-1 day"));     
	$dateinfo['tomdate'] = date("Y-m-d H:i:s",strtotime("+1 day"));
	$dateinfo['yestmdate'] = date("Y-m-d H:i:s",strtotime("-1 month"));     
	$dateinfo['tommdate'] = date("Y-m-d H:i:s",strtotime("+1 month"));
	if($date)$dateinfo['timed'] = date("Y-m-d H:i:s",$time);
	$dateinfo['time'] = time();  
	$dateinfo['yesttime'] = strtotime("-1 day"); 
	$dateinfo['tomtime'] = strtotime("+1 day"); 
	$dateinfo['yestmtime'] = strtotime("-1 month"); 
	$dateinfo['tommtime'] = strtotime("+1 month"); 
	if($date)$dateinfo['timez'] = strtotime($date);

	return $dateinfo;
}

// 获取当月第一天及最后一天
function getthemonth()
{
	$today = date("Y-m-d");
    $firstday = date('Y-m-01 00:00:00', strtotime($today));
    $lastday = date('Y-m-d 23:59:59', strtotime("$firstday +1 month -1 day"));
    return array("start"=>$firstday,"end"=>$lastday);
}

// 获取本周第一天及最后一天
function gettheweek()
{
	//当前日期
	$sdefaultDate = date("Y-m-d");
	//$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
	$first=1;
	//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
	$w=date('w',strtotime($sdefaultDate));
	//获取本周开始日期，如果$w是0，则表示周日，减去 6 天
	$week_start=date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
	//本周结束日期
	$week_end=date('Y-m-d',strtotime("$week_start +6 days"));
	return array("week_start"=>$week_start,"week_end"=>$week_end);
}

// 获取上周第一天及最后一天
function gettopweek()
{
	 $theweek = gettheweek();	
	 $week_start = $theweek['week_start'];
	 $week_end = $theweek['week_end'];
	 
	 $top_week_start = date("Y-m-d",strtotime("$week_start -7 day"));
	 $top_week_end = date("Y-m-d",strtotime("$week_end -7 day"));
	 
	 return array("week_start"=>$top_week_start,"week_end"=>$top_week_end);
}

// 计算两个日期间的差值 
function getdatediff($time1=0,$time2=0)
{
	$date1=date_create($time2);
	$date2=date_create($time1);
	$diff=date_diff($date1,$date2);	
	
	return $diff;
}

//PHP 计算两个时间戳之间相差的时间
//功能：计算两个时间戳之间相差的日时分秒
//$begin_time  开始时间戳
//$end_time 结束时间戳
function timediff($begin_time=0,$end_time=0)
{
    if($begin_time < $end_time){
        $starttime = $begin_time;
        $endtime = $end_time;
    }else{
        $starttime = $end_time;
        $endtime = $begin_time;
    }
    //计算天数
    $timediff = $endtime-$starttime;
    $days = intval($timediff/86400);
    //计算小时数
    $remain = $timediff%86400;
    $hours = intval($remain/3600);
    //计算分钟数
    $remain = $remain%3600;
    $mins = intval($remain/60);
    //计算秒数
    $secs = $remain%60;
    $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);
    return $res;
}
function ceshitime($starttime=0,$endtime=0)
{
    return timediff(strtotime($starttime),strtotime($endtime));
     
}

/** 
 * 数组分页函数  核心函数  array_slice 
 * 用此函数之前要先将数据库里面的所有数据按一定的顺序查询出来存入数组中 
 * $count   每页多少条数据 
 * $page   当前第几页 
 * $array   查询出来的所有数组 
 * order 0 - 不变     1- 反序 
 */
function page_array($count=0,$page=0,$array=array(),$order=''){  
    global $countpage; #定全局变量  
    $page=(empty($page))?'1':$page; #判断当前页面是否为空 如果为空就表示为第一页面   
       $start=($page-1)*$count; #计算每次分页的开始位置  
    if($order==1){  
      $array=array_reverse($array);  
    }     
    $totals=count($array);    
    $countpage=ceil($totals/$count); #计算总页面数  
    $pagedata=array();  
    $pagedata=array_slice($array,$start,$count);  
    return $pagedata;  #返回查询数据  
}  

/*
利用PHP一维数组的函数，对数组进行排序。需要用到的函数有
PHP的一维数组排序函数：
sort 对数组的值按照升序排列(rsort降序)，不保留原始的键
ksort 对数组的键按照升序排列(krsort降序) 保留键值关系
asort 对数组的值按照升序排列(arsort降序)，保留键值关系
$array:需要排序的数组
$keys:需要根据某个key排序
$sort:倒叙还是顺序
*/
function arraySort($array=array(),$keys='',$sort='asc') {
    $newArr = $valArr = array();
    foreach ($array as $key=>$value) {
        $valArr[$key] = $value[$keys]; 
    }
    ($sort == 'asc') ?  asort($valArr) : arsort($valArr);//先利用keys对数组排序，目的是把目标数组的key排好序
    reset($valArr); //指针指向数组第一个值 
    foreach($valArr as $key=>$value) {
        $newArr[$key] = $array[$key];
    }
    return $newArr;
}

// 对多个数组或多维数组进行排序
function arrayDuoSort($sortdistance=array(),&$data=array(),$desc='asc')
{
	if($desc == 'asc')
	{
		$desc = SORT_ASC;
	}
	if($desc == 'desc')
	{
		$desc = SORT_DESC;	
	}
	array_multisort($sortdistance,$desc,$data);
}

// php获取当前页面文件名
function get_php_self()
{
    $php_self=substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
   
    return $php_self;
}

// php 获取当前页面URL后缀
function get_php_url($module="")
{
	if(!empty($module))
	{
		// 首页
		if(strtolower($_SERVER['REQUEST_URI']) == $module)
		{
			$res = 1;
		}
		// 列表页
		if(strpos(strtolower($_SERVER['REQUEST_URI']),$module) !== false && $module != "/")
		{
			$res = 1;
		}
	}else{
		$res = 	strtolower($_SERVER['REQUEST_URI']);
	}
	
	return $res;
}

/** 常用切割字符串，切割数组 **/
function strtoarr($f='',$str='')
{
	$arr = explode("$f", $str);	
	return $arr;
}
function arrtostr($f='',$arr='')
{
	$str = implode("$f", $arr);	
	return $str;
}

/*替换关键词内容*/
function contentkeyword($keyword='', $p='', $content='')
{
	$content = preg_replace("{$keyword}",$p,$content);//替换内容传统的
	return $content;
}

/*
*获取html指定标签的相关属性
*@param string $content 要解析HTML内容
*@param string $attr 指定要获取的标签属性
*@param string $tag  指定解析标签
*@return  array 
*/

function get_html_attr_by_tag($content="",$attr="src",$tag="img")
{
	$arr=array();
	$cache_arr=array();
	$attr=explode(',',$attr);
	$tag=explode(',',$tag);
	foreach($tag as $i=>$t){
		foreach($attr as $a){
			preg_match_all("/<\s*".$t."\s+[^>]*?".$a."\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i",$content,$match);
			foreach($match[2] as $n=>$m){
				$arr[$t][$n][$a]=$m;
			}
		}
	}
	
	return $arr;//array
}

// php 抓取某个标签的特定属性值的内容
// 返回值为数组 ,查找到的标签内的内容 
function get_tag_data($str="",$tag="",$attrname="",$value="")
{
	$regex = "/<$tag.*?$attrname=\".*?$value.*?\".*?>(.*?)<\/$tag>/is";
	preg_match_all($regex,$str,$matches,PREG_PATTERN_ORDER); return $matches[1];
}


/* 操作成功跳转提示
** $data = array("url","message");
** modulesuccess(array("url"=>$feedbackurl,"message"=>$configlang['Submit_data_inserted_successfully']));
*/
function modulesuccess($data=array())
{
	global $configlang,$configinfo;
	
	$openfilehtml = file_get_contents(MODULEPARA_PATH."/config/block/hook_modulesuccess.html");
	// 加载模板程序配置
	if($configinfo['tplok'] == 1)
	{
		if(iffile($configinfo['tplurl']."/config/block/hook_modulesuccess.html") == 1)
		{
			$openfilehtml = file_get_contents($configinfo['tplurl']."/config/block/hook_modulesuccess.html");
		}
	}
	$reshtml = phpvarok($openfilehtml,$data,$configlang);
	
	echo $reshtml;exit;
}

/* 操作失败跳转提示
** $data = array("url","message");
** moduleerror(array("message"=>$configlang['Submit_data_inserted_successfully']));
*/
function moduleerror($data=array())
{
	global $configlang,$configinfo;
	
	$openfilehtml = file_get_contents(MODULEPARA_PATH."/config/block/hook_moduleerror.html");
	// 加载模板程序配置
	if($configinfo['tplok'] == 1)
	{
		if(iffile($configinfo['tplurl']."/config/block/hook_moduleerror.html") == 1)
		{
			$openfilehtml = file_get_contents($configinfo['tplurl']."/config/block/hook_moduleerror.html");
		}
	}
	if(empty($data['url']))$data['url'] = "javascript:history.back(-1);";
	$reshtml = phpvarok($openfilehtml,$data,$configlang);
	
	echo $reshtml;exit;
}

/**
 * 获取用户真实 IP
 */
function moduleGetIP()
{
    static $realip;
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
    return $realip;
}


/**
 * 获取 IP  地理位置
 * 淘宝IP接口
 * @Return: array
 */
function moduleGetCity($ip = '')
{
    if($ip == ''){
        $url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json";//请求新浪ip地址库
        $ip=json_decode(file_get_contents($url),true);
        $data = $ip;
    }else{
        $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;//请求淘宝ip地址库
        $ip=json_decode(file_get_contents($url));   
        if((string)$ip->code=='1'){
           return false;
        }
        $data = (array)$ip->data;
    }
    
    return $data;   
}

// 判断是否是手机站
function isMobileModule() { 
  // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
	return true;
  } 
  // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  if (isset($_SERVER['HTTP_VIA'])) { 
	// 找不到为flase,否则为true
	return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
  } 
  // 脑残法，判断手机发送的客户端标志,兼容性有待提高。其中'MicroMessenger'是电脑微信
  if (isset($_SERVER['HTTP_USER_AGENT'])) {
	$clientkeywords = array('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile','MicroMessenger'); 
	// 从HTTP_USER_AGENT中查找手机浏览器的关键字
	if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
	  return true;
	} 
  } 
  // 协议法，因为有可能不准确，放到最后判断
  if (isset ($_SERVER['HTTP_ACCEPT'])) { 
	// 如果只支持wml并且不支持html那一定是移动设备
	// 如果支持wml和html但是wml在html之前则是移动设备
	if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') && strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
	  return true;
	} 
  } 
  return false;
}

// 判断是否是微信端
function isWeixinModule() {    
	if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {      
		return true;    
	} else {
		return false;    
	} 
} 

// 判断是否是小程序端
function isXcxModule()
{
	if (strpos($_SERVER['HTTP_USER_AGENT'], 'miniProgram') !== false) {
		return true;
	} else {
		return false;
	}	
}

// 判断文件路径是否为图片
function isUrlImage($filename)
{
	$filenames = getstrtoarr(".", $filename);
	$fileType = ".".$filenames[1];
	$types = '.gif|.jpg|.jpeg|.png|.bmp'; //定义检查的图片类型
	if(stripos($types,$fileType))
	{
		return true;
	}
	else
	{
		return false;
	}
}

// 判断是否为AJAX请求
function isAjaxPost()
{
	if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest")
	{
		// 是ajax请求
		return 1;
	} else {
		// 不是ajax请求
		return 0;
	}	
}
?>